#ifndef HANDLE_MODULE_H
#define HANDLE_MODULE_H
#pragma execution_character_set("utf-8")
#include <enum_type.h>
#include <local_socket.h>
#include <c_template.h>
#include <QThread>
#include <QSharedPointer>
#include <QMap>
#include <QTimer>
#include <common.h>
#include <QFile>
#include <QDir>
struct UnHandleTask
{
    UnHandleTask(QString id,QString type,QString data)
    {
        this->id=id;
        this->type=type;
        this->data=data;
    }
    QString id;
    QString type;
    QString data;
};
class Handle_module : public QObject
{
    Q_OBJECT
public:
    Handle_module(QString connect_Name);
    ~Handle_module();
    void    handle_init();                                                           //初始化
    QSharedPointer<local_socket> c_socket=NULL;                                      //本地连接socket
    QString connect_Name;                                                            //连接名称
    enum caculate_status status=free_status;                                         //枚举类型
    QMap<c_Template*,QSharedPointer<c_Template>> caculate_template;                  //计算模板
    QMap<c_Template*,QSharedPointer<QThread>>    thread;                             //计算模板对应类型
    enum serviceType     server_type=unknow_serviceType;                             //服务类型
    QMap<c_Template*,caculate_status>template_Type;                                  //节点状况
    QStringList getCaculate_status();                                                //获取节点状况
    QStringList Logdata;
    QTimer      clock;
    QString     Savename;
    QString     oldname;
    int         Log_Size;
    bool isDirExist(QString fullPath);
signals:
    void send_instruction(task_type type,QString data,QObject*);                     //发送计算指令给计算模板
private:
    task_type QstringTotype(QString type);                                           //字符串转换枚举
    QString   typetoQString(task_type type);                                         //枚举转换字符串
    void      caculate_init(int threadCount);                                        //初始化程序
    void      acquire_serviceType();                                                 //获取服务类型
    QSharedPointer<c_Template> getFreeTemplate();                                    //获取空闲的计算模块
    void   add_UnhandleTask(QString id,QString type,QString data);
    void   handle_UnhandleTask();
    QList <UnHandleTask>                  UnHandleTaskList;        //未处理任务
private slots:
    void receive_data(QString id,QString type,QString information);                  //获取服务器指令
    void reply_data(task_type type,QString data);                                    //转发运算结果
    void SaveLog();                                                                  //保存LOG

};

#endif // HANDLE_MODULE_H
